package com.example.mapper;

import com.example.entity.Document;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface DocumentMapper {

        /**
         * 根据空间ID获取文档列表
         */
        List<Document> getDocumentsBySpaceId(@Param("spaceId") Integer spaceId);

        /**
         * 根据文档ID获取文档详情
         */
        Document getDocumentById(@Param("documentId") Integer documentId);

        /**
         * 创建新文档
         */
        int insertDocument(Document document);

        /**
         * 更新文档信息
         */
        int updateDocument(Document document);

        /**
         * 删除文档
         */
        int deleteDocument(@Param("documentId") Integer documentId);

        /**
         * 根据文档名称和空间ID查询文档
         */
        Document getDocumentByNameAndSpace(@Param("documentName") String documentName,
                        @Param("spaceId") Integer spaceId);

        /**
         * 获取用户收藏的文档列表
         */
        List<Document> getFavoriteDocuments(@Param("username") String username);

        /**
         * 添加文档收藏
         */
        int addDocumentFavorite(@Param("documentId") Integer documentId, @Param("username") String username);

        /**
         * 取消文档收藏
         */
        int removeDocumentFavorite(@Param("documentId") Integer documentId, @Param("username") String username);

        /**
         * 记录文档访问历史
         */
        int insertAccessHistory(@Param("documentId") Integer documentId, @Param("username") String username);

        /**
         * 获取用户最近访问的文档
         */
        List<Document> getRecentDocuments(@Param("username") String username, @Param("limit") Integer limit);

        /**
         * 根据关键词搜索文档（标题和内容）
         */
        List<Document> searchDocumentsByKeyword(@Param("keyword") String keyword, @Param("spaceId") Integer spaceId);

        /**
         * 根据文档标题搜索
         */
        List<Document> searchDocumentsByTitle(@Param("title") String title, @Param("spaceId") Integer spaceId);

        /**
         * 根据文档内容搜索
         */
        List<Document> searchDocumentsByContent(@Param("content") String content, @Param("spaceId") Integer spaceId);

        /**
         * 根据创建者搜索文档
         */
        List<Document> searchDocumentsByCreator(@Param("creatorUsername") String creatorUsername,
                        @Param("spaceId") Integer spaceId);

        /**
         * 根据文档类型搜索
         */
        List<Document> searchDocumentsByType(@Param("documentType") String documentType,
                        @Param("spaceId") Integer spaceId);

        /**
         * 根据文件夹ID获取文档列表
         */
        List<Document> getDocumentsByFolderId(@Param("folderId") Integer folderId);

        /**
         * 高级搜索文档
         */
        List<Document> advancedSearchDocuments(@Param("keyword") String keyword,
                        @Param("spaceId") Integer spaceId,
                        @Param("creatorUsername") String creatorUsername,
                        @Param("documentType") String documentType,
                        @Param("folderId") Integer folderId,
                        @Param("startDate") String startDate,
                        @Param("endDate") String endDate);
}